package com.nineclock.system.service.impl;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.nineclock.common.constant.NcConstant;
import com.nineclock.common.enums.ResponseEnum;
import com.nineclock.common.exception.NcException;
import com.nineclock.common.utils.BeanHelper;
import com.nineclock.common.utils.CurrentUserHolder;
import com.nineclock.system.dto.SysCompanyContactConfigDTO;
import com.nineclock.system.mapper.SysCompanyContactConfigMapper;
import com.nineclock.system.pojo.SysCompanyContactConfig;
import com.nineclock.system.service.SysCompanyContactConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 淮晓欢
 * @Company http://www.huaixiaohuan.com
 * @Version 1.0
 */
@Service
@Slf4j
@Transactional
public class SysCompanyContactConfigServiceImpl implements SysCompanyContactConfigService {

    @Autowired
    SysCompanyContactConfigMapper  companyContactConfigMapper;

    @Override
    public void addCompanyContactConfig(SysCompanyContactConfigDTO companyContactConfigDTO) {
        //参数校验
        if (companyContactConfigDTO == null || StrUtil.isEmpty(companyContactConfigDTO.getName())){
            throw new RuntimeException(ResponseEnum.INVALID_PARAM_ERROR.getMessage());
        }

        SysCompanyContactConfig sysCompanyContactConfig = BeanHelper.copyProperties(companyContactConfigDTO, SysCompanyContactConfig.class);

        // 设置状态 为1， 表示可用
        sysCompanyContactConfig.setStatus((short)1);
        sysCompanyContactConfig.setCompanyId(CurrentUserHolder.get().getCompanyId());
        //设置字段类型为字符串类型
        sysCompanyContactConfig.setFieldType("string");

        companyContactConfigMapper.insert(sysCompanyContactConfig);
    }

    @Override
    public List<SysCompanyContactConfigDTO> queryCompanyContactConfig() {
        List<SysCompanyContactConfigDTO> sysCompanyContactConfig=new ArrayList<>();

        Long companyId = CurrentUserHolder.get().getCompanyId();

//        构造条件
        LambdaQueryWrapper<SysCompanyContactConfig> lambdaQueryWrapper=new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(SysCompanyContactConfig::getCompanyId,companyId);
        List<SysCompanyContactConfig> sysCompanyContactConfigs = companyContactConfigMapper.selectList(lambdaQueryWrapper);

//        如果企业没有设置通讯录字段，使用默认
        if (CollectionUtils.isEmpty(sysCompanyContactConfigs)){
            for (String fieldName : NcConstant.COMPANY_CONFIG_CONTACT_LIST) {
                SysCompanyContactConfig config=new SysCompanyContactConfig();
                config.setStatus((short)1);
                config.setType("fixed");
                config.setName(fieldName);
                config.setFieldType("string");
                config.setCompanyId(companyId);
                companyContactConfigMapper.insert(config);

                sysCompanyContactConfig.add(BeanHelper.copyProperties(config,SysCompanyContactConfigDTO.class));
            }
            return sysCompanyContactConfig;
        }

        return BeanHelper.copyWithCollection(sysCompanyContactConfigs,SysCompanyContactConfigDTO.class);
    }

    @Override
    public void updateCompanyContactConfig(Long id, Short status) {
        SysCompanyContactConfig config = companyContactConfigMapper.selectById(id);

        if (config==null){
            throw new NcException(ResponseEnum.COMPANY_NOT_FOUND);
        }

        config.setCompanyId(CurrentUserHolder.get().getCompanyId());
        config.setStatus(status);

        companyContactConfigMapper.updateById(config);
    }

    @Override
    public void deleteCompanyContactConfig(Long id) {

        companyContactConfigMapper.deleteById(id);
    }
}
